Skip to content

feat(cli): add vp hooks command for managing Git hooks (#2219) - #2341

Open
dennybiasiolli wants to merge 11 commits into
voidzero-dev:mainfrom
dennybiasiolli:feat/2219-remove-git-hooks
Open

feat(cli): add vp hooks command for managing Git hooks (#2219)#2341
dennybiasiolli wants to merge 11 commits into
voidzero-dev:mainfrom
dennybiasiolli:feat/2219-remove-git-hooks

Conversation

@dennybiasiolli

@dennybiasiolli dennybiasiolli commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Closes #2219

Adds a dedicated vp hooks command so users can manage the Vite+ Git hook
dispatcher without following the manual steps from the commit-hooks guide:

  • vp hooks setup — install or refresh the dispatcher (core.hooksPath + <dir>/_)
  • vp hooks disable — tear down the dispatcher and persist the decision in local
    git config so prepare / vp config do not reinstall it
  • vp hooks enable — re-enable after disable (same as setup)
  • vp hooks status — show preference, core.hooksPath, dispatcher, and project hooks

Project-owned hooks (e.g. .vite-hooks/pre-commit), staged config, and
package.json lifecycle scripts are left alone. Custom directories work via
--hooks-dir and are remembered in local git config for later commands and
vp config.

Why

#2219: once hooks are set up there was no first-class way to remove them, so people
had to hand-edit core.hooksPath and delete .vite-hooks/_. Maintainers preferred
a vp hooks surface (setup / disable / enable / status) over a
vp config --uninstall-hooks flag, with the disable decision persisted.


Disclaimer: assisted by Grok 4.5 (xAI) while implementing and reviewing this change.

@netlify

netlify Bot commented Aug 5, 2026

Copy link
Copy Markdown

Deploy Preview for viteplus-preview ready!

Name Link
🔨 Latest commit 6dd1f66
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a787129efa69600081019f2
😎 Deploy Preview https://deploy-preview-2341--viteplus-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@dennybiasiolli
dennybiasiolli force-pushed the feat/2219-remove-git-hooks branch 4 times, most recently from 9ac52bd to db4b05e Compare August 6, 2026 11:44
@fengmk2 fengmk2 self-assigned this Aug 7, 2026
@fengmk2
fengmk2 requested a review from TheAlexLichter August 7, 2026 14:05
@fengmk2

fengmk2 commented Aug 7, 2026

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d1d530ca12

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cli/src/config/hooks.ts
Comment thread packages/cli/src/config/hooks.ts Outdated
Comment thread packages/cli/src/config/hooks.ts Outdated
Comment thread packages/cli/src/config/hooks.ts
Comment thread packages/cli/src/hooks/bin.ts
Comment thread packages/cli/src/config/hooks.ts Outdated
Comment thread packages/cli/src/hooks/bin.ts Outdated
@dennybiasiolli
dennybiasiolli force-pushed the feat/2219-remove-git-hooks branch from d1d530c to f96ecef Compare August 7, 2026 15:14
@dennybiasiolli

Copy link
Copy Markdown
Contributor Author

Rebased on top of the main branch, so the commit history is clear(er).
I applied the suggested changes in separate commits, let me know if you prefer to have a clear commit history and I can squash them in a single one or in the previous commits in this same branch.
I personally prefer to have a clean commit history without too many "fix" commits before merging, but that is just my personal taste for my repos, I'm open to suggestions here :)

Implement pure hook lifecycle helpers on top of install(): user preference
persistence (local git config), safe per-scope core.hooksPath unset, and
status reporting. Teach install() and vp config to honor a disable preference
and resolve the last-used hooks directory. Cover lifecycle, foreign path,
worktree, stored custom dir, and unsafe-tree cases in unit tests; update the
config help snapshot for the remembered hooks-dir default.
Add the hooks bin entry and register it from bin.ts so local vp can run
setup/disable/enable/status. Bundle the entry with tsdown, document it in
the CLI package build notes, and add a PTY lifecycle fixture for
setup/status/disable/enable plus prepare-style config skip after disable.
Delegate hooks from the Rust global CLI to the JS implementation, and list
the command in global help, the interactive picker, and the local NAPI
help surface. Update top-level help snapshots and add vp hooks --help
coverage for local and global flavors.
Add setup/disable/enable/status to the commit-hooks guide with a quick
start, and point create, migrate, troubleshooting, and the guide index at
the new commands so users can discover and operate them easily.
Keep enable/disable/status as the public surface. enable installs or
refreshes the dispatcher and clears a disable preference.
Resolve relative and absolute hooksPath spellings against the git
worktree root (via realpath) before deciding ownership, so disable
and install do not treat /repo/.vite-hooks/_ as a foreign path.
@dennybiasiolli
dennybiasiolli force-pushed the feat/2219-remove-git-hooks branch from f96ecef to c088f14 Compare August 7, 2026 15:19
Persist the setup-time git prefix with the hooks directory so enable,
disable, status, and vp config resolve the same dispatcher from a nested
cwd instead of treating root .vite-hooks/_ as foreign.
disable now always walks local and worktree scopes instead of only the
effective value, so a foreign worktree path cannot leave a stale local
Vite+ hooksPath behind after the dispatcher is removed.
git config --unset exits 5 when a key has multiple values, which we
treated as success. Use --unset-all for the disable preference and
scoped core.hooksPath so enable cannot leave a stale disabled state.
Positional directories and unknown flags were ignored, so
`vp hooks disable .custom-hooks` could tear down the default dispatcher.
Fail fast and point at --hooks-dir instead.
@dennybiasiolli
dennybiasiolli force-pushed the feat/2219-remove-git-hooks branch from c088f14 to ca54fec Compare August 7, 2026 16:40

@fengmk2 fengmk2 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dennybiasiolli Thanks! LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Command for removing git hooks

2 participants